Análise do Jogo de Imagens aplicadas no Ensino médio

Amostra dos dados da pesquisa realizada

Tabulação do número de acertos dos itens do jogo de imagens.

Coluna Descrição
Exoticas Número de acertos dentre todas as imagens exibidas do tipo exótica, valor experado é 5.
Nativas Número de acertos dentre todas as imagens exibidas do tipo nativa, valor experado é 5.

Determinado a taxa de percepção

Entende-se por taxa de percepção o fator determinado pela quantidade média de acertos dentre as questões apresentadas aos alunos, em relação a turma em que o questionario foi aplicado.

Teste de normalidade

Para determinar a normalidade nas distribuiçoes das respostas do jogo de imagens.

Identificação médio das turmas (nomes das espécies & origens)

Indice de reconhecimento médio das turmas

Q-Q Test

Teste de variância

Para determinar a variância

Algoritmo Comparação Variável p_valor variancia
F test to compare two variances Nativas x Exóticas Indice de reconhecimento 0.279 TRUE
Identificação do nome das espécies 0.6553 TRUE
Identificação da origem 0.0343 FALSE

Analises descritivas

Indice de identificação por Origem

Indice de identificação por Espécie

Testes de hipoteses

Esperado p-valor >= 0.05 na normalidade (espera-se H0) Esperado p-valor <= 0.05 no teste de hipotese (espera-se H1)

1 - Os alunos itendificam mais os nomes dos animais de espécies exóticas que os animais de espécies nativas.

TEST T-student
H0 = Tident(exoticas) = Tident(nativas)
H1 = Tident(exoticas) > Tident(nativas)

Algoritmo Comparação Variável p_valor H0 H1 Confiança
Two Sample t-test Exóticas x Nativas Indice de reconhecimento 0.00829379088264213 FALSE TRUE 3.25% ~ 20.26%
Identificação do nome das espécies 2.77135680934484e-09 FALSE TRUE 27.69% ~ 46.21%
Identificação da origem 3.74320861066021e-12 FALSE TRUE -33% ~ -22.49%

Obs.:
Intervalo de confiança 95%

2 - Os alunos identificam mais espécies de origem exótica que as de origem nativa.

TEST T-student
H0 = Tident(origem.exoticas) = Tident(origem.nativas)
H1 = Tident(origem.exoticas) > Tident(origem.nativas)

t.test(pos_gabarito$proporcoes$por_turma$p_origem_nativas, 
       pos_gabarito$proporcoes$por_turma$p_origem_exoticas, 
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  pos_gabarito$proporcoes$por_turma$p_origem_nativas and pos_gabarito$proporcoes$por_turma$p_origem_exoticas
t = 10.751, df = 32, p-value = 3.743e-12
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2248657 0.3299903
sample estimates:
mean of x mean of y 
0.8005233 0.5230953 

3 - Os alunos identificam mais as espécies exóticas (nome dos animais e origem) que espécies nativas.

ANOVA

4 - Os alunos reconhecem mais mamíferos do que os demais grupos taxonómicos.

ANOVA

comparacao diff lwr upr p adj significancia
invertebrado-aves -0.1520 -0.3764 0.0724 0.3385 FALSE
mamifero-aves 0.0024 -0.2220 0.2269 1.0000 FALSE
peixe-aves -0.0509 -0.2753 0.1735 0.9709 FALSE
reptil-aves -0.1309 -0.3553 0.0935 0.4939 FALSE
mamifero-invertebrado 0.1545 -0.0700 0.3789 0.3223 FALSE
peixe-invertebrado 0.1012 -0.1233 0.3256 0.7261 FALSE
reptil-invertebrado 0.0211 -0.2033 0.2455 0.9990 FALSE
peixe-mamifero -0.0533 -0.2777 0.1711 0.9655 FALSE
reptil-mamifero -0.1333 -0.3578 0.0911 0.4749 FALSE
reptil-peixe -0.0800 -0.3044 0.1444 0.8624 FALSE

5 - Estudantes que residem na Cidade 1 (com UC) identificam mais espécies nativas do que estudantes que residem na Cidade 2 (sem UC).

t.test(nat$silvania, nat$belavista,
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  nat$silvania and nat$belavista
t = -0.70051, df = 32, p-value = 0.4887
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.13259671  0.06473419
sample estimates:
mean of x mean of y 
0.3509933 0.3849245 

6 - Estudantes que residem em área rural tem maior conhecimento sobre as espécies nativas.

7 -

8 - Frequencia de contato natureza

comparacao diff lwr upr p adj significancia
Raramente-Nunca 0.3707 -0.0960 0.8374 0.1816 FALSE
Ás vezes-Nunca 0.3259 -0.1381 0.7898 0.2906 FALSE
Frequentemente-Nunca 0.3325 -0.1315 0.7964 0.2716 FALSE
Sempre-Nunca 0.3343 -0.1297 0.7982 0.2665 FALSE
Ás vezes-Raramente -0.0448 -0.2075 0.1179 0.9371 FALSE
Frequentemente-Raramente -0.0382 -0.2010 0.1245 0.9639 FALSE
Sempre-Raramente -0.0365 -0.1992 0.1263 0.9697 FALSE
Frequentemente-Ás vezes 0.0066 -0.1481 0.1612 1.0000 FALSE
Sempre-Ás vezes 0.0084 -0.1463 0.1630 0.9999 FALSE
Sempre-Frequentemente 0.0018 -0.1529 0.1564 1.0000 FALSE

9 - Fez aulas praticas

comparacao diff lwr upr p adj significancia
Sim, fazenda-Não fez -0.1000 -0.3867 0.1868 0.9364 FALSE
Sim, FLONA-Não fez 0.0446 -0.1971 0.2863 0.9976 FALSE
Sim, memorial do cerrado-Não fez 0.0481 -0.2050 0.3012 0.9972 FALSE
Sim, outro-Não fez 0.0467 -0.2210 0.3143 0.9983 FALSE
Sim, parque ou trilha-Não fez -0.0155 -0.2088 0.1779 1.0000 FALSE
Sim, zoologico-Não fez 0.0675 -0.1742 0.3092 0.9781 FALSE
Sim, FLONA-Sim, fazenda 0.1446 -0.1768 0.4659 0.8144 FALSE
Sim, memorial do cerrado-Sim, fazenda 0.1481 -0.1820 0.4781 0.8164 FALSE
Sim, outro-Sim, fazenda 0.1467 -0.1946 0.4880 0.8446 FALSE
Sim, parque ou trilha-Sim, fazenda 0.0845 -0.2023 0.3713 0.9715 FALSE
Sim, zoologico-Sim, fazenda 0.1675 -0.1538 0.4888 0.6895 FALSE
Sim, memorial do cerrado-Sim, FLONA 0.0035 -0.2882 0.2952 1.0000 FALSE
Sim, outro-Sim, FLONA 0.0021 -0.3023 0.3065 1.0000 FALSE
Sim, parque ou trilha-Sim, FLONA -0.0601 -0.3017 0.1816 0.9880 FALSE
Sim, zoologico-Sim, FLONA 0.0229 -0.2589 0.3047 1.0000 FALSE
Sim, outro-Sim, memorial do cerrado -0.0014 -0.3150 0.3122 1.0000 FALSE
Sim, parque ou trilha-Sim, memorial do cerrado -0.0636 -0.3167 0.1896 0.9874 FALSE
Sim, zoologico-Sim, memorial do cerrado 0.0194 -0.2723 0.3112 1.0000 FALSE
Sim, parque ou trilha-Sim, outro -0.0622 -0.3298 0.2055 0.9916 FALSE
Sim, zoologico-Sim, outro 0.0208 -0.2836 0.3252 1.0000 FALSE
Sim, zoologico-Sim, parque ou trilha 0.0830 -0.1587 0.3247 0.9406 FALSE

10 - Estudantes da Cidade 1 (com UC) tem maior número de acertos de espécies nativas.

comparacao diff lwr upr p adj significancia
Sim-Não 0.0571 -0.1168 0.2311 0.4962 FALSE

11 - Ranking dos animais

LS0tCnRpdGxlOiAiTWVzdHJhZG8gQmlvbG9naWEiCmF1dGhvcjogIkhlcnNvbiBNZWxvIgpkYXRlOiAiMjgvMDYvMjAxOCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNQotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgaW5jbHVkZSA9IEZBTFNFfQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KGdyaWQpCmxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkobm9ydGVzdCkKbGlicmFyeShzdGF0cykKbGlicmFyeShtdWx0Y29tcFZpZXcpCgpzdXBwcmVzc1dhcm5pbmdzKFN5cy5zZXRsb2NhbGUoIkxDX0FMTCIsICdlbl9VUy5VVEYtOCcpKQpvcHRpb25zKHNjaXBlbiA9IDk5OSwgZGlnaXRzID0gNCkKIyBvcHRpb25zKCJzY2lwZW4iPS0xMDAsICJkaWdpdHMiPTYpCiMgZ2V0d2QoKQpsb2FkKCJkYWRvcy5SRGF0YSIpCgojIEltcGxlbWVudGFuZG8gZm9ybXVsYSBwYXJhIHRlc3RlcyBlc3RhdMOtc3RpY29zIHBhZHJvbml6YWRhCnRlc3RlLmFub3ZhIDwtIGZ1bmN0aW9uKGZvcm11bGEsIGRhdGEpIHsKICAgIHQubm9ybWFsaWRhZGUgPC0gCiAgICAgICAgYWdncmVnYXRlKGZvcm11bGEsIGRhdGEsIAogICAgICAgICAgICAgICAgICBGVU4gPSBmdW5jdGlvbih4KSBzaGFwaXJvLnRlc3QoeCkkcC52YWx1ZSkgJT4lCiAgICAgICAgbXV0YXRlKEgwID0gKHZhbHVlIDw9IDAuMDUpLAogICAgICAgICAgICAgICBub3JtYWxpZGFkZSA9IGNlbGxfc3BlYyhIMCwgYm9sZCA9IEgwLAogICAgICAgICAgICAgICAgICAgY29sb3I9IGlmZWxzZShIMCwgIndoaXRlIiwgImJsYWNrIiksIAogICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9IGlmZWxzZShIMCwgImdyZWVuIiwgIiNDQ0NDQ0MiKSkKICAgICAgICAgICAgICAgKSAlPiUKICAgICAgICBrYWJsZShlc2NhcGUgPSBGKSAlPiUKICAgICAgICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IFRSVUUpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKQoKICAgIHQuYW5vdmEgPC0gYW5vdmEobG0oZm9ybXVsYSwgZGF0YSkpCiAgICB0LnR1a2V5IDwtIFR1a2V5SFNEKGFvdihsbShmb3JtdWxhLCBkYXRhKSkpCgogICAgaWYobGVuZ3RoKHQudHVrZXkpID4gMSkgewogICAgICAgIGVycm9yKCJBTk9WQSBmYXRvcmlhbCAoZmFsdGEgdHJhdGFyIGlzc28pISIpCiAgICB9CiAgICB0dWtleS50YmwgPC0gYXMuZGF0YS5mcmFtZSh0LnR1a2V5W1sxXV0sIGN1dC5uYW1lcyA9IEYpCiAgICB0dWtleS50YmwkY29tcGFyYWNhbyA9IHJvd25hbWVzKHR1a2V5LnRibCkKICAgIHJvd25hbWVzKHR1a2V5LnRibCkgPSBOVUxMCiAgICB0YWJlbGEudHVrZXkgPC0gdHVrZXkudGJsICU+JQogICAgICAgIG11dGF0ZShIMCA9IChgcCBhZGpgIDw9IDAuMDUpLAogICAgICAgICAgICAgICBzaWduaWZpY2FuY2lhID0gY2VsbF9zcGVjKEgwLCBib2xkID0gSDAsCiAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKEgwLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gaWZlbHNlKEgwLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKQogICAgICAgICAgICAgICApICU+JQogICAgICAgIHNlbGVjdChjb21wYXJhY2FvLCBkaWZmOmBwIGFkamAsIHNpZ25pZmljYW5jaWEpICU+JQogICAgICAgIGthYmxlKGVzY2FwZSA9IEYpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUpCiAgICAKICAgICAgICAKICAgIHJlc3VsdGFkbyA8LSAKICAgICAgICBsaXN0KAogICAgICAgICAgICB0ZXN0ZS5ub3JtYWxpZGFkZSA9IHQubm9ybWFsaWRhZGUsCiAgICAgICAgICAgIHRlc3RlLmFub3ZhID0gdC5hbm92YSwKICAgICAgICAgICAgdHVrZXkgPSB0LnR1a2V5LAogICAgICAgICAgICB0YWJlbGEudHVrZXkgPSB0YWJlbGEudHVrZXkKICAgICAgICApCiAgICByZXR1cm4ocmVzdWx0YWRvKQp9CgpgYGAKCiMjIEFuw6FsaXNlIGRvIEpvZ28gZGUgSW1hZ2VucyBhcGxpY2FkYXMgbm8gRW5zaW5vIG3DqWRpbwoKCiMjIyBBbW9zdHJhIGRvcyBkYWRvcyBkYSBwZXNxdWlzYSByZWFsaXphZGEKClRhYnVsYcOnw6NvIGRvIG7Dum1lcm8gZGUgYWNlcnRvcyBkb3MgaXRlbnMgZG8gam9nbyBkZSBpbWFnZW5zLgoKYGBge3IsIGVjaG89RkFMU0V9CmRlc2NfY29sdW5hcyA8LSBkYXRhLmZyYW1lKAogICAgIkNvbHVuYSIgPSBjKCJFeG90aWNhcyIsICJOYXRpdmFzIiksCiAgICAiRGVzY3Jpw6fDo28iID0gYygiTsO6bWVybyBkZSBhY2VydG9zIGRlbnRyZSB0b2RhcyBhcyBpbWFnZW5zIGV4aWJpZGFzIGRvIHRpcG8gZXjDs3RpY2EsIHZhbG9yIGV4cGVyYWRvIMOpIDUuIiwKICAgICAgICAgICAgICAgICAgICAiTsO6bWVybyBkZSBhY2VydG9zIGRlbnRyZSB0b2RhcyBhcyBpbWFnZW5zIGV4aWJpZGFzIGRvIHRpcG8gbmF0aXZhLCB2YWxvciBleHBlcmFkbyDDqSA1LiIpCiAgICApCmRlc2NfY29sdW5hcyAlPiUKICBrYWJsZSgpICU+JQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUpCgpgYGAKCgpgYGB7cn0KaGVhZChwb3NfZ2FiYXJpdG8kZGFkb3MsIDEwKQpgYGAKCiMjIyMgRGV0ZXJtaW5hZG8gYSB0YXhhIGRlIHBlcmNlcMOnw6NvCgpFbnRlbmRlLXNlIHBvciB0YXhhIGRlIHBlcmNlcMOnw6NvIG8gZmF0b3IgZGV0ZXJtaW5hZG8gcGVsYSBxdWFudGlkYWRlIG3DqWRpYSBkZSBhY2VydG9zIGRlbnRyZSBhcyBxdWVzdMO1ZXMgYXByZXNlbnRhZGFzIGFvcyBhbHVub3MsIGVtIHJlbGHDp8OjbyBhIHR1cm1hIGVtIHF1ZSBvIHF1ZXN0aW9uYXJpbyBmb2kgYXBsaWNhZG8uCgpgYGB7cn0KcHJpbnQocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hKQpgYGAKCiMjIyBUZXN0ZSBkZSBub3JtYWxpZGFkZQoKUGFyYSBkZXRlcm1pbmFyIGEgbm9ybWFsaWRhZGUgbmFzIGRpc3RyaWJ1acOnb2VzIGRhcyByZXNwb3N0YXMgZG8gam9nbyBkZSBpbWFnZW5zLgoKYGBge3IsIGVjaG89RkFMU0V9Cm5vcm1hbGlkYWRlIDwtIGZ1bmN0aW9uKHgpIHsKICAgIHQxIDwtIHNoYXBpcm8udGVzdCh4KQogICAgdDIgPC0gc2YudGVzdCh4KQogICAgdDMgPC0gbGlsbGllLnRlc3QoeCkKICAgIHQ0IDwtIGFkLnRlc3QoeCkKICAgIHQ1IDwtIGN2bS50ZXN0KHgpCiAgICByZXR1cm4oIGRhdGEuZnJhbWUoCiAgICAgICAgQWxnb3JpdG1vID0gYyh0MSRtZXRob2QsIHQyJG1ldGhvZCwgCiAgICAgICAgICAgICAgICAgICB0MyRtZXRob2QsIHQ0JG1ldGhvZCwgCiAgICAgICAgICAgICAgICAgICB0NSRtZXRob2QpLAogICAgICAgIHAudmFsb3IgPSBjKHQxJHAudmFsdWUsIHQyJHAudmFsdWUsIAogICAgICAgICAgICAgICAgICAgIHQzJHAudmFsdWUsIHQ0JHAudmFsdWUsIAogICAgICAgICAgICAgICAgICAgIHQ1JHAudmFsdWUpLAogICAgICAgIE5vcm1hbGlkYWRlID0gYyh0MSRwLnZhbHVlID4gLjA1LCB0MiRwLnZhbHVlID4gLjA1LCAKICAgICAgICAgICAgICAgICAgICAgIHQzJHAudmFsdWUgPiAuMDUsIHQ0JHAudmFsdWUgPiAuMDUsIAogICAgICAgICAgICAgICAgICAgICAgdDUkcC52YWx1ZSA+IC4wNSkKICAgICkpCn0KCmdyYWZpY29fZGVuc2lkYWRlIDwtIGZ1bmN0aW9uKHZhcmlhdmVsLCBjb3IsIHRpdHVsbykgewogICAgcGxvdCA8LSAKICAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEgJT4lIAogICAgICAgIGdnZGVuc2l0eSh4ID0gdmFyaWF2ZWwsIGZpbGwgPSBjb3IsCiAgICAgICAgICBtYWluID0gdGl0dWxvLAogICAgICAgICAgeGxhYiA9ICJQZXJjZW50dWFsIGRlIGFjZXJ0b3MiKSArIAogICAgICAgIHhsaW0oMCwgMSkgKyAKICAgICAgICB5bGltKDAsIDgpCiAgICBub21hbGlkYWRlIDwtIAogICAgICAgIGdndGV4dHRhYmxlKAogICAgICAgICAgICBub3JtYWxpZGFkZShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFbW3ZhcmlhdmVsXV0pLCAKICAgICAgICAgICAgcm93cyA9IE5VTEwsIHRoZW1lID0gdHRoZW1lKGJhc2Vfc3R5bGUgPSAibU9yYW5nZSIsIGJhc2Vfc2l6ZSA9IDgpCiAgICAgICAgKQogICAgCiAgICByZXN1bHRhZG8gPC0gbGlzdCgKICAgICAgICBwbG90ID0gcGxvdCwKICAgICAgICBub3JtYWxpZGFkZSA9IG5vbWFsaWRhZGUKICAgICkKICAgIHJldHVybihyZXN1bHRhZG8pCn0KCnQxIDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX25hdGl2YXMiLCAiZ3JlZW4iLCAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyBkZSBvcmlnZW0gTmF0aXZhcyIpCnQyIDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX2V4b3RpY2FzIiwgInJlZCIsICJJZGVudGlmaWNhw6fDo28gZG8gbm9tZSBkYXMgZXNww6ljaWVzIGRlIG9yaWdlbSBFeMOzdGljYXMiKQp0MyA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9vcmlnZW1fbmF0aXZhcyIsICJkYXJrZ3JlZW4iLCAiSWRlbnRpZmljYcOnw6NvIGRlIG9yaWdlbSBOYXRpdmFzIikKdDQgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfb3JpZ2VtX2V4b3RpY2FzIiwgImRhcmtyZWQiLCAiSWRlbnRpZmljYcOnw6NvIGRlIG9yaWdlbSBFeMOzdGljYXMiKQp0NSA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9pbmRpY2VfbmF0aXZhcyIsICJvcmFuZ2UiLCAiSW5kaWNlIGRlIHJlY29uaGVjaW1lbnRvIE5hdGl2YXMgKG9yaWdlbnMgKyBlc3DDqWNpZXMpIikKdDYgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfaW5kaWNlX2V4b3RpY2FzIiwgIm9yYW5nZXJlZCIsICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8gRXjDs3RpY2FzIChvcmlnZW5zICsgZXNww6ljaWVzKSIpCmBgYAoKIyMjIyBJZGVudGlmaWNhw6fDo28gbcOpZGlvIGRhcyB0dXJtYXMgKG5vbWVzIGRhcyBlc3DDqWNpZXMgJiBvcmlnZW5zKQoKYGBge3IgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NX0KZ3JpZC5hcnJhbmdlKHQxJHBsb3QsIHQyJHBsb3QsCiAgICAgICAgICAgICB0MSRub3JtYWxpZGFkZSwgdDIkbm9ybWFsaWRhZGUsCiAgICAgICAgICAgICB0MyRwbG90LCB0NCRwbG90LAogICAgICAgICAgICAgdDMkbm9ybWFsaWRhZGUsIHQ0JG5vcm1hbGlkYWRlLAogICAgICAgICAgICAgbmNvbCA9IDIsCiAgICAgICAgICAgICBoZWlnaHRzID0gYygzLDIsMywyKSwKICAgICAgICAgICAgIHRvcCA9IHRleHRHcm9iKCJEZW5zaWRhZGUgZGUgaWRlbnRpZmljYcOnw6NvIG3DqWRpYSBkYXMgdHVybWFzIGVudHJlIFxuZXNwZWNpZXMgZSBzdWFzIG9yaWdlbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udHNpemUgPSAyMCwgZm9udCA9IDIpKQogICAgICAgICAgICAgKQpgYGAKCiMjIyMgSW5kaWNlIGRlIHJlY29uaGVjaW1lbnRvIG3DqWRpbyBkYXMgdHVybWFzCgpgYGB7ciBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQpncmlkLmFycmFuZ2UodDUkcGxvdCwgdDYkcGxvdCwKICAgICAgICAgICAgIHQ1JG5vcm1hbGlkYWRlLCB0NiRub3JtYWxpZGFkZSwKICAgICAgICAgICAgIG5jb2wgPSAyLAogICAgICAgICAgICAgaGVpZ2h0cyA9IGMoNCwzKSwKICAgICAgICAgICAgIHRvcCA9IHRleHRHcm9iKCJEZW5zaWRhZGUgZG9zIGluZGljZXMgZGUgcmVjb25oZWNpbWVudG8gbcOpZGlvIGRhcyB0dXJtYXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udHNpemUgPSAyMCwgZm9udCA9IDIpKQogICAgICAgICAgICAgKQpgYGAKCgojIyMgUS1RIFRlc3QKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD00fQpxcXBsb3QuZGF0YSA8LSBmdW5jdGlvbiAodmVjLCB0aXR1bG8pIHsKICAjIGZvbGxvd2luZyBmb3VyIGxpbmVzIGZyb20gYmFzZSBSJ3MgcXFsaW5lKCkKICB5IDwtIHF1YW50aWxlKHZlY1shaXMubmEodmVjKV0sIGMoMC4yNSwgMC43NSkpCiAgeCA8LSBxbm9ybShjKDAuMjUsIDAuNzUpKQogIHNsb3BlIDwtIGRpZmYoeSkvZGlmZih4KQogIGludCA8LSB5WzFMXSAtIHNsb3BlICogeFsxTF0KCiAgZCA8LSBkYXRhLmZyYW1lKHJlc2lkcyA9IHZlYykKCiAgZ2dwbG90KGQsIGFlcyhzYW1wbGUgPSByZXNpZHMpKSArIAogICAgICBzdGF0X3FxKCkgKyAKICAgICAgZ2VvbV9hYmxpbmUoc2xvcGUgPSBzbG9wZSwgaW50ZXJjZXB0ID0gaW50LCBjb2wgPSAicmVkIikgKwogICAgICB4bGltKC0yLCAyKSArCiAgICAgIHlsaW0oMCwgMSkgKwogICAgICB0aGVtZV9idygpICsKICAgICAgbGFicygKICAgICAgICB0aXRsZSA9IHRpdHVsbwogICAgKQp9CgpxMSA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9uYXRpdmFzLCAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyBkZSBvcmlnZW0gTmF0aXZhcyIpCnEyIDwtIHFxcGxvdC5kYXRhKHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2V4b3RpY2FzLCAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyBkZSBvcmlnZW0gRXhvdGljYXMiKQpxMyA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fbmF0aXZhcywgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gTmF0aXZhcyIpCnE0IDwtIHFxcGxvdC5kYXRhKHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9leG90aWNhcywgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gRXhvdGljYXMiKQpxNSA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfbmF0aXZhcywgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byBOYXRpdmFzIChvcmlnZW5zICsgZXNww6ljaWVzKSIpCnE2IDwtIHFxcGxvdC5kYXRhKHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2luZGljZV9leG90aWNhcywgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byBFeG90aWNhcyAob3JpZ2VucyArIGVzcMOpY2llcykiKQoKZ3JpZC5hcnJhbmdlKHExLCBxMiwgCiAgICAgICAgICAgICBxMywgcTQsCiAgICAgICAgICAgICBxNSwgcTYsCiAgICAgICAgICAgICBuY29sID0gMiwKICAgICAgICAgICAgIHRvcCA9IHRleHRHcm9iKCJOb3JtYWwgUS1RIFBsb3RcbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMjAsIGZvbnQgPSAyKSkKICAgICAgICAgICAgICkKYGBgCgojIyMgVGVzdGUgZGUgdmFyacOibmNpYQoKUGFyYSBkZXRlcm1pbmFyIGEgdmFyacOibmNpYQoKYGBge3J9CnZhcmlhbmNpYSA8LSBkYXRhLmZyYW1lKAogICAgQWxnb3JpdG1vID0gYygiRiB0ZXN0IHRvIGNvbXBhcmUgdHdvIHZhcmlhbmNlcyIpLAogICAgIkNvbXBhcmHDp8OjbyIgPSBjKCJOYXRpdmFzIHggRXjDs3RpY2FzIiksCiAgICAiVmFyacOhdmVsIiA9IGMoCiAgICAgICAgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byIsCiAgICAgICAgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMiLAogICAgICAgICJJZGVudGlmaWNhw6fDo28gZGEgb3JpZ2VtIgogICAgKSwKICAgICJwX3ZhbG9yIiA9IGMoCiAgICAgICAgdmFyLnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfaW5kaWNlX25hdGl2YXMsIAogICAgICAgICAgICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2luZGljZV9leG90aWNhcywgCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikkcC52YWx1ZSwKICAgICAgICB2YXIudGVzdChwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9uYXRpdmFzLCAKICAgICAgICAgICAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9leG90aWNhcywgCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikkcC52YWx1ZSwKICAgICAgICB2YXIudGVzdChwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fbmF0aXZhcywgCiAgICAgICAgICAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX2V4b3RpY2FzLCAKICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKSRwLnZhbHVlCiAgICApCikKCnZhcmlhbmNpYSA8LSB2YXJpYW5jaWEgJT4lCiAgICBtdXRhdGUoCiAgICAgICAgdmFyaWFuY2lhID0gcF92YWxvciA+IDAuMDUsCiAgICAgICAgcF92YWxvciA9IGNlbGxfc3BlYyhyb3VuZChwX3ZhbG9yLCA0KSwgYm9sZCA9IFQsIGNvbG9yID0gImJsYWNrIiwgYWxpZ24gPSAicmlnaHQiKSwKICAgICAgICB2YXJpYW5jaWEgPSBjZWxsX3NwZWModmFyaWFuY2lhLCBib2xkID0gdmFyaWFuY2lhLAogICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSBpZmVsc2UodmFyaWFuY2lhLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9IGlmZWxzZSh2YXJpYW5jaWEsICJncmVlbiIsICIjQ0NDQ0NDIikpCiAgICApCgp2YXJpYW5jaWEgJT4lCiAga2FibGUoZXNjYXBlID0gRikgJT4lCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImJvcmRlcmVkIiksIGZ1bGxfd2lkdGggPSBUUlVFKSAlPiUKICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkgJT4lCiAgY29sbGFwc2Vfcm93cyhjb2x1bW5zID0gMToyLCB2YWxpZ24gPSAidG9wIikgCmBgYAoKIyMjIEFuYWxpc2VzIGRlc2NyaXRpdmFzCgpgYGB7cn0KaGVhZChwb3NfZ2FiYXJpdG8kZXNwZWNpZXMsIDEwKQpgYGAKCiMjIyMgSW5kaWNlIGRlIGlkZW50aWZpY2HDp8OjbyBwb3IgT3JpZ2VtCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NH0KcG9zX2dhYmFyaXRvJGVzcGVjaWUgJT4lIAogICAgZ2dwbG90KGFlcyhlc3BlY2llRGVzYywgZnIsIGZpbGwgPSBncnVwbykpICsgCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsKICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQoZnIgKiAxMDAsIDEpLCAiJSIpKSwgCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLCB2anVzdCA9IDAuNSwKICAgICAgICAgICAgICBoanVzdCA9IC0wLjUpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMS4yKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgICBmYWNldF93cmFwKH5vcmlnZW0sIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgICBjb29yZF9mbGlwKCkgKwogICAgdGhlbWVfYncoKSArCiAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpLAogICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICAgIGxhYnModGl0bGUgPSAiSW5kaWNlIGRlIElkZW50aWZpY2HDp8OjbyBwb3IgT3JpZ2VtIiwKICAgICAgICAgZmlsbCA9ICJHcnVwb3MiLCB4ID0gIiIsIHkgPSAiXG5GcmVxdWVuY2lhIHJlbGF0aXZhIikKCmBgYAoKIyMjIyBJbmRpY2UgZGUgaWRlbnRpZmljYcOnw6NvIHBvciBFc3DDqWNpZQoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTR9CnBvc19nYWJhcml0byRlc3BlY2llICU+JSAKICAgIGdncGxvdChhZXMoZXNwZWNpZURlc2MsIGZyLCBmaWxsID0gb3JpZ2VtKSkgKyAKICAgIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKwogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChyb3VuZChmciAqIDEwMCwgMSksICIlIikpLCAKICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHZqdXN0ID0gMC41LAogICAgICAgICAgICAgIGhqdXN0ID0gLTAuMykgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxLjIpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICAgIGZhY2V0X3dyYXAofmdydXBvLCBzY2FsZXMgPSAiZnJlZV95IikgKwogICAgY29vcmRfZmxpcCgpICsKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBsYWJzKHRpdGxlID0gIkluZGljZSBkZSBJZGVudGlmaWNhw6fDo28gcG9yIEVzcMOpY2llIiwKICAgICAgICAgZmlsbCA9ICJPcmlnZW0iLCB4ID0gIiIsIHkgPSAiXG5GcmVxdWVuY2lhIHJlbGF0aXZhIikKYGBgCgojIyBUZXN0ZXMgZGUgaGlwb3Rlc2VzCgpFc3BlcmFkbyBwLXZhbG9yID49IDAuMDUgbmEgbm9ybWFsaWRhZGUgKGVzcGVyYS1zZSBIMCkKRXNwZXJhZG8gcC12YWxvciA8PSAwLjA1IG5vIHRlc3RlIGRlIGhpcG90ZXNlIChlc3BlcmEtc2UgSDEpCgojIyMgMSAtIE9zIGFsdW5vcyBpdGVuZGlmaWNhbSBtYWlzIG9zIG5vbWVzIGRvcyBhbmltYWlzIGRlIGVzcMOpY2llcyBleMOzdGljYXMgcXVlIG9zIGFuaW1haXMgZGUgZXNww6ljaWVzIG5hdGl2YXMuCgoqKlRFU1QgVC1zdHVkZW50KiogIApIMCA9IFRpZGVudChleG90aWNhcykgPSBUaWRlbnQobmF0aXZhcykgIApIMSA9IFRpZGVudChleG90aWNhcykgPiBUaWRlbnQobmF0aXZhcykKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hICU+JQogIHNlbGVjdCh0dXJtYXMsIHBfbm9tZV9leG90aWNhcyA9IHBfZXhvdGljYXMsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9leG90aWNhczpwX2luZGljZV9uYXRpdmFzKSAlPiUKICBtZWx0KGlkID0gInR1cm1hcyIpCgpjYmluZCh0bXAsIGNvbHNwbGl0KHRtcCR2YXJpYWJsZSwgIl8iLCBjKCJwIiwgImluZGljYWRvciIsICJvcmlnZW0iKSkpICU+JQogIHNlbGVjdCh0dXJtYXMsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBvcmlnZW0sIHkgPSB2YWx1ZSwgZmlsbCA9IG9yaWdlbSksIHNob3cubGVnZW5kID0gVCkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBmYWNldF93cmFwKH5pbmRpY2Fkb3IpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkJveHBsb3QgZGUgaWRlbnRpZmljYcOnw6NvIGRvcyBjcml0w6lyaW9zIGVzdGFiZWxlY2lkb3MiLAogICAgICAgeSA9ICJQZXJjZW50dWFsIGRlIGlkZW50aWZpY2HDp8OjbyIsIHggPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjUsIGhqdXN0ID0gMSksIAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQp0MSA8LSB0LnRlc3QoCiAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsIAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfaW5kaWNlX25hdGl2YXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKdDIgPC0gdC50ZXN0KAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfZXhvdGljYXMsIAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfbmF0aXZhcywgCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQp0MyA8LSB0LnRlc3QoCiAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fZXhvdGljYXMsIAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKCmRhdGEuZnJhbWUoCiAgICBBbGdvcml0bW8gPSBjKHQxJG1ldGhvZCwgdDIkbWV0aG9kLCB0MyRtZXRob2QpLAogICAgIkNvbXBhcmHDp8OjbyIgPSBjKCJFeMOzdGljYXMgeCBOYXRpdmFzIiksCiAgICAiVmFyacOhdmVsIiA9IGMoCiAgICAgICAgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byIsCiAgICAgICAgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMiLAogICAgICAgICJJZGVudGlmaWNhw6fDo28gZGEgb3JpZ2VtIgogICAgKSwKICAgIHBfdmFsb3IgPSBjKHQxJHAudmFsdWUsIHQyJHAudmFsdWUsIHQzJHAudmFsdWUpLAogICAgSDAgPSBjKHQxJHAudmFsdWUgPj0gMC4wNSwgdDIkcC52YWx1ZSA+PSAwLjA1LCB0MyRwLnZhbHVlID49IDAuMDUpLAogICAgSDEgPSBjKHQxJHAudmFsdWUgPCAwLjA1LCB0MiRwLnZhbHVlIDwgMC4wNSwgdDMkcC52YWx1ZSA8IDAuMDUpLAogICAgIkNvbmZpYW7Dp2EiID0gYygKICAgICAgICBwYXN0ZShwYXN0ZTAocm91bmQodDEkY29uZi5pbnQgKiAxMDAsIDIpLCAiJSIpLCBjb2xsYXBzZSA9ICIgfiAiKSwKICAgICAgICBwYXN0ZShwYXN0ZTAocm91bmQodDIkY29uZi5pbnQgKiAxMDAsIDIpLCAiJSIpLCBjb2xsYXBzZSA9ICIgfiAiKSwKICAgICAgICBwYXN0ZShwYXN0ZTAocm91bmQodDMkY29uZi5pbnQgKiAxMDAsIDIpLCAiJSIpLCBjb2xsYXBzZSA9ICIgfiAiKQogICAgKQopICU+JQogIG11dGF0ZSgKICAgIHBfdmFsb3IgPSBjZWxsX3NwZWMocF92YWxvciwgYm9sZCA9IFQsIGNvbG9yID0gImJsYWNrIiwgYWxpZ24gPSAicmlnaHQiKSwKICAgIEgwID0gY2VsbF9zcGVjKEgwLCBib2xkID0gSDAsCiAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKEgwLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gaWZlbHNlKEgwLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKSwKICAgIEgxID0gY2VsbF9zcGVjKEgxLCBib2xkID0gSDEsIAogICAgICAgICAgICAgICAgICAgY29sb3IgPSBpZmVsc2UoSDEsICJ3aGl0ZSIsICJibGFjayIpLCAKICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBpZmVsc2UoSDEsICJncmVlbiIsICIjQ0NDQ0NDIikpCiAgKSAlPiUKICBrYWJsZShlc2NhcGUgPSBGKSAlPiUKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IFRSVUUpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKSAlPiUKIyAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFQsIGNvbG9yID0gImRhcmtibHVlIikgJT4lCiAgY29sbGFwc2Vfcm93cyhjb2x1bW5zID0gMToyLCB2YWxpZ24gPSAidG9wIikgJT4lCiAgZm9vdG5vdGUoZ2VuZXJhbCA9ICJJbnRlcnZhbG8gZGUgY29uZmlhbsOnYSA5NSUiLAogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG5PYnMuOiAiLAogICAgICAgICAgIGZvb3Rub3RlX2FzX2NodW5rID0gVCkKYGBgCgoKIyMjIDIgLSBPcyBhbHVub3MgaWRlbnRpZmljYW0gbWFpcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIGV4w7N0aWNhIHF1ZSBhcyBkZSBvcmlnZW0gbmF0aXZhLgoKKipURVNUIFQtc3R1ZGVudCoqICAKSDAgPSBUaWRlbnQob3JpZ2VtLmV4b3RpY2FzKSA9IFRpZGVudChvcmlnZW0ubmF0aXZhcykgIApIMSA9IFRpZGVudChvcmlnZW0uZXhvdGljYXMpID4gVGlkZW50KG9yaWdlbS5uYXRpdmFzKQoKYGBge3J9CnQudGVzdChwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fbmF0aXZhcywgCiAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fZXhvdGljYXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKYGBgCgojIyMgMyAtIE9zIGFsdW5vcyBpZGVudGlmaWNhbSBtYWlzIGFzIGVzcMOpY2llcyBleMOzdGljYXMgKG5vbWUgZG9zIGFuaW1haXMgZSBvcmlnZW0pIHF1ZSBlc3DDqWNpZXMgbmF0aXZhcy4KCioqQU5PVkEqKiAgCgojIyMgNCAtIE9zIGFsdW5vcyByZWNvbmhlY2VtIG1haXMgbWFtw61mZXJvcyBkbyBxdWUgb3MgZGVtYWlzIGdydXBvcyB0YXhvbsOzbWljb3MuCgoqKkFOT1ZBKiogIAoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTN9CnBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKICBnZ3Bsb3QoKSArIAogIGdlb21fYm94cGxvdChhZXMoeCA9IGdydXBvLCB5ID0gdmFsdWUsIGZpbGwgPSBvcmlnZW0pLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgcG9yIGdydXBvIHRheG9uw7RtaWNvIiwKICAgICAgIHkgPSAiUGVyY2VudHVhbCBkZSBpZGVudGlmaWNhw6fDo28iLCB4ID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDI1LCBoanVzdCA9IDEpLCAKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NX0KYW5vdmFfdGF4b25vbWljbyA8LSB0ZXN0ZS5hbm92YShmb3JtdWxhID0gdmFsdWUgfiBncnVwbywgCiAgICAgICAgICAgIGRhdGEgPSBwb3NfZ2FiYXJpdG8kdGF4b25vbWljb3MpCgphbm92YV90YXhvbm9taWNvJHRlc3RlLm5vcm1hbGlkYWRlCmFub3ZhX3RheG9ub21pY28kdGVzdGUuYW5vdmEKYW5vdmFfdGF4b25vbWljbyR0YWJlbGEudHVrZXkKCiMgZGFkb3NBTk9WQSA8LSAKIyAgICAgcG9zX2dhYmFyaXRvJHRheG9ub21pY29zICU+JQojICAgICBzZWxlY3QodHVybWFzLCBncnVwb3MgPSBncnVwbywgdmFsb3IpCiMgI2Fub3ZhIDwtIGFvdihkYXRhID0gcG9zX2dhYmFyaXRvJHRheG9ub21pY29zLCB2YWxvciB+IGdydXBvICsgb3JpZ2VtKQojIGFub3ZhIDwtIGFvdihkYXRhID0gZGFkb3NBTk9WQSwgdmFsb3IgfiBncnVwb3MpCiMgc3VtbWFyeShhbm92YSkKIyB0dWtleSA8LSBUdWtleUhTRChhbm92YSkKIyB0dWtleQojICNwbG90KHR1a2V5LCBsYXMgPSAxLCBjb2wgPSAiYnJvd24iKQojIAojIHRreSA9IGFzLmRhdGEuZnJhbWUodHVrZXkkZ3J1cG9zKQojIHRreSRwYWlyID0gcm93bmFtZXModGt5KQojIGdncGxvdCh0a3ksIGFlcyhjb2xvdXIgPSBjdXQoYHAgYWRqYCwgYygwLCAwLjAxLCAwLjA1LCAxKSwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBjKCJwPDAuMDEiLCJwPDAuMDUiLCJOw6NvIHNpZ25pZmljYXRpdm8iKSkpKSArCiMgICAgIGdlb21faGxpbmUoeWludGVyY2VwdD0wLCBsdHk9IjExIiwgY29sb3VyPSJncmV5MzAiKSArCiMgICAgIGdlb21fZXJyb3JiYXIoYWVzKHBhaXIsIHltaW49bHdyLCB5bWF4PXVwciksIHdpZHRoPTAuMikgKwojICAgICBnZW9tX3BvaW50KGFlcyhwYWlyLCBkaWZmKSkgKwojICAgICBjb29yZF9mbGlwKCkgKwojICAgICB0aGVtZV9idygpICsKIyAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKIyAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKIyAgICAgbGFicyh0aXRsZSA9ICJUdWtleSIsCiMgICAgICAgICAgY29sb3VyID0gIiIsIHggPSAiQ29tcGFyYcOnw6NvIiwgeSA9ICJEaWZlcmVuw6dhIikKICAgIApgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD04fQojIGRhZG9zQU5PVkEgPC0gCiMgICAgIHBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKIyAgICAgbXV0YXRlKGdydXBvcyA9IHBhc3RlKGdydXBvLCAiQCIsIG9yaWdlbSkpICU+JQojICAgICBzZWxlY3QodHVybWFzLCBncnVwb3MsIHZhbG9yKQojICNhbm92YSA8LSBhb3YoZGF0YSA9IHBvc19nYWJhcml0byR0YXhvbm9taWNvcywgdmFsb3IgfiBncnVwbyArIG9yaWdlbSkKIyBhbm92YSA8LSBhb3YoZGF0YSA9IGRhZG9zQU5PVkEsIHZhbG9yIH4gZ3J1cG9zKQojIHN1bW1hcnkoYW5vdmEpCiMgdHVrZXkgPC0gVHVrZXlIU0QoYW5vdmEpCiMgdHVrZXkKIyAjcGxvdCh0dWtleSwgbGFzID0gMSwgY29sID0gImJyb3duIikKIyAKIyB0a3kgPSBhcy5kYXRhLmZyYW1lKHR1a2V5JGdydXBvcykKIyB0a3kkcGFpciA9IHJvd25hbWVzKHRreSkKIyBnZ3Bsb3QodGt5LCBhZXMoY29sb3VyID0gY3V0KGBwIGFkamAsIGMoMCwgMC4wMSwgMC4wNSwgMSksIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYygicDwwLjAxIiwicDwwLjA1IiwiTm9uLVNpZyIpKSkpICsKIyAgICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTAsIGx0eT0iMTEiLCBjb2xvdXI9ImdyZXkzMCIpICsKIyAgICAgZ2VvbV9lcnJvcmJhcihhZXMocGFpciwgeW1pbj1sd3IsIHltYXg9dXByKSwgd2lkdGg9MC4yKSArCiMgICAgIGdlb21fcG9pbnQoYWVzKHBhaXIsIGRpZmYpKSArCiMgICAgIGNvb3JkX2ZsaXAoKSArCiMgICAgIHRoZW1lX2J3KCkgKwojICAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpLAojICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwojICAgICBsYWJzKHRpdGxlID0gIlR1a2V5IiwKIyAgICAgICAgICBjb2xvdXIgPSAiIiwgeCA9ICJDb21wYXJhw6fDo28iLCB5ID0gIkRpZmVyZW7Dp2EiKQogICAgCmBgYAoKIyMjIDUgLSBFc3R1ZGFudGVzIHF1ZSByZXNpZGVtIG5hIENpZGFkZSAxIChjb20gVUMpIGlkZW50aWZpY2FtIG1haXMgZXNww6ljaWVzIG5hdGl2YXMgZG8gcXVlIGVzdHVkYW50ZXMgcXVlIHJlc2lkZW0gbmEgQ2lkYWRlIDIgKHNlbSBVQykuCgpgYGB7cn0KcHJvcG9yY29lc1Bvck11bmljaXBpbyA8LQogICAgbWVyZ2UoCiAgICAgICAgcG9zX2dhYmFyaXRvJGRhZG9zICU+JSAKICAgICAgICAgICAgc2VsZWN0KHR1cm1hcywgbXVuaWNpcGlvKSAlPiUgCiAgICAgICAgICAgIHVuaXF1ZSgpLAogICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYV9zZXhvCiAgICApICU+JQogICAgdGJsX2RmKCkKCm5hdCA8LSBOVUxMCm5hdCRzaWx2YW5pYSA8LSAKICAgIG5hLm9taXQoc3ByZWFkKHByb3BvcmNvZXNQb3JNdW5pY2lwaW8sIGtleSA9IG11bmljaXBpbywgdmFsdWUgPSBwX25hdGl2YXMpWywiU2lsdsOibmlhIl0pICU+JSBhcy52ZWN0b3IoKQpuYXQkYmVsYXZpc3RhIDwtIAogICAgbmEub21pdChzcHJlYWQocHJvcG9yY29lc1Bvck11bmljaXBpbywga2V5ID0gbXVuaWNpcGlvLCB2YWx1ZSA9IHBfbmF0aXZhcylbLCJCZWxhIFZpc3RhIGRlIEdvacOhcyJdKSAlPiUgYXMudmVjdG9yKCkKCmJveHBsb3QobmF0JHNpbHZhbmlhLCBuYXQkYmVsYXZpc3RhKQojdmFyLnRlc3QobmF0X3NpbHZhbmlhLCBuYXRfYmVsYXZpc3RhLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQoKdC50ZXN0KG5hdCRzaWx2YW5pYSwgbmF0JGJlbGF2aXN0YSwKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpCmBgYAoKIyMjIDYgLSBFc3R1ZGFudGVzIHF1ZSByZXNpZGVtIGVtIMOhcmVhIHJ1cmFsIHRlbSBtYWlvciBjb25oZWNpbWVudG8gc29icmUgYXMgZXNww6ljaWVzIG5hdGl2YXMuCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9M30KdG1wIDwtIAogICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hX2FyZWEgJT4lCiAgICBzZWxlY3QobXVuaWNpcGlvLCBhcmVhLCBwX25vbWVfbmF0aXZhcyA9IHBfbmF0aXZhcywgcF9vcmlnZW1fbmF0aXZhcywgcF9pbmRpY2VfbmF0aXZhcykgJT4lCiAgICBhcnJhbmdlKGFyZWEpICU+JQogICAgbWVsdChpZCA9IGMoIm11bmljaXBpbyIsICJhcmVhIikpCgp0bXAgPC0KICAgIGNiaW5kKHRtcCwgY29sc3BsaXQodG1wJHZhcmlhYmxlLCAiXyIsIGMoInAiLCAiaW5kaWNhZG9yIiwgIm9yaWdlbSIpKSkgJT4lCiAgICBzZWxlY3QobXVuaWNpcGlvLCBhcmVhLCBpbmRpY2Fkb3IsIG9yaWdlbSwgdmFsdWUpCgp0bXAgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBhcmVhLCB5ID0gdmFsdWUsIGZpbGwgPSBtdW5pY2lwaW8pLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIiwKICAgICAgIHkgPSAiUGVyY2VudHVhbCBkZSBpZGVudGlmaWNhw6fDo28iLCB4ID0gIiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikKYGBgCgpgYGB7cn0KI2JveHBsb3QodmFsdWUgIH4gbXVuaWNpcGlvICsgYXJlYSwgZGF0YSA9IHRtcCkKIyBpbnRlcmFjdGlvbi5wbG90KHRtcCRhcmVhLCB0bXAkbXVuaWNpcGlvLCB0bXAkdmFsdWUpCiMgaW50ZXJhY3Rpb24ucGxvdCh0bXAkbXVuaWNpcGlvLCB0bXAkYXJlYSwgdG1wJHZhbHVlKQojIGFnZ3JlZ2F0ZSh2YWx1ZSB+IGFyZWEgKiBtdW5pY2lwaW8sIGRhdGEgPSB0bXAsIEZVTiA9IGZ1bmN0aW9uKHgpIHNoYXBpcm8udGVzdCh4KSRwLnZhbHVlKQojIHRtcCRiYXJ0ID0gcGFzdGUodG1wJG11bmljaXBpbywgIi0iLCB0bXAkYXJlYSkKIyBiYXJ0bGV0dC50ZXN0KHZhbHVlIH4gYmFydCwgZGF0YSA9IHRtcCkKCnQuYW5vdmEgPC0gYW5vdmEobG0odmFsdWUgIH4gbXVuaWNpcGlvICogYXJlYSwgZGF0YSA9IHRtcCAlPiUgZmlsdGVyKGluZGljYWRvciA9PSAiaW5kaWNlIikpKQp0LmFub3ZhCgp0dWtleSA8LSBUdWtleUhTRChhb3YobG0odmFsdWUgIH4gbXVuaWNpcGlvICogYXJlYSwgZGF0YSA9IHRtcCAlPiUgZmlsdGVyKGluZGljYWRvciA9PSAiaW5kaWNlIikpKSkKcGxvdCh0dWtleSkKCnRrIDwtIGFzLmRhdGEuZnJhbWUodHVrZXkkYG11bmljaXBpbzphcmVhYCkKdGskY29tcGFyYWNhbyA9IHJvd25hbWVzKHRrKQpyb3duYW1lcyh0aykgPSBOVUxMCnRrICU+JQogICAgc2VsZWN0KGNvbXBhcmFjYW8sIGRpZmY6YHAgYWRqYCkgJT4lCiAgICBtdXRhdGUoc2lnbmlmaWNhbmNpYSA9IGBwIGFkamAgPD0gMC4wNSkgJT4lCiAgICBrYWJsZSgpICU+JQogICAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImJvcmRlcmVkIiksIGZ1bGxfd2lkdGggPSBUUlVFKSAlPiUKICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKQoKYGBgCgojIyMgNyAtIAoKIyMjIDggLSBGcmVxdWVuY2lhIGRlIGNvbnRhdG8gbmF0dXJlemEKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfZnJlcV9jb250YXRvICU+JQogICAgc2VsZWN0KGZyZXF1ZW5jaWEsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9uYXRpdmFzLCBwX2luZGljZV9uYXRpdmFzKSAlPiUKICAgIGFycmFuZ2UoZnJlcXVlbmNpYSkgJT4lCiAgICBtZWx0KGlkID0gImZyZXF1ZW5jaWEiKQoKdG1wIDwtCiAgICBjYmluZCh0bXAsIGNvbHNwbGl0KHRtcCR2YXJpYWJsZSwgIl8iLCBjKCJwIiwgImluZGljYWRvciIsICJvcmlnZW0iKSkpICU+JQogICAgc2VsZWN0KGZyZXF1ZW5jaWEsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkKCnRtcCAlPiUKICBnZ3Bsb3QoKSArIAogIGdlb21fYm94cGxvdChhZXMoeCA9IGZyZXF1ZW5jaWEsIHkgPSB2YWx1ZSwgZmlsbCA9IGZyZXF1ZW5jaWEpLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIiwKICAgICAgIHkgPSAiUGVyY2VudHVhbCBkZSBpZGVudGlmaWNhw6fDo28iLCB4ID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDI1LCBoanVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQphZ2dyZWdhdGUodmFsdWUgfiBmcmVxdWVuY2lhLCBkYXRhID0gdG1wICU+JSBmaWx0ZXIoaW5kaWNhZG9yID09ICJpbmRpY2UiKSwgRlVOID0gZnVuY3Rpb24oeCkgc2hhcGlyby50ZXN0KHgpJHAudmFsdWUpCgp0LmFub3ZhIDwtIGFub3ZhKGxtKHZhbHVlICB+IGZyZXF1ZW5jaWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkKdC5hbm92YQoKdHVrZXkgPC0gVHVrZXlIU0QoYW92KGxtKHZhbHVlICB+IGZyZXF1ZW5jaWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkpCnR1a2V5CnBsb3QodHVrZXkpCgp0ayA8LSBhcy5kYXRhLmZyYW1lKHR1a2V5JGZyZXF1ZW5jaWEpCnRrJGNvbXBhcmFjYW8gPSByb3duYW1lcyh0aykKcm93bmFtZXModGspID0gTlVMTAp0ayAlPiUKICAgIHNlbGVjdChjb21wYXJhY2FvLCBkaWZmOmBwIGFkamApICU+JQogICAgbXV0YXRlKHNpZ25pZmljYW5jaWEgPSBgcCBhZGpgIDw9IDAuMDUpICU+JQogICAga2FibGUoKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkKCmBgYAoKIyMjIDkgLSBGZXogYXVsYXMgcHJhdGljYXMKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfZmV6X2F1bGEgJT4lCiAgICBzZWxlY3QoZmV6LmF1bGEsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9uYXRpdmFzLCBwX2luZGljZV9uYXRpdmFzKSAlPiUKICAgIGFycmFuZ2UoZmV6LmF1bGEpICU+JQogICAgbWVsdChpZCA9ICJmZXouYXVsYSIpCgp0bXAgPC0gY2JpbmQodG1wLCBjb2xzcGxpdCh0bXAkdmFyaWFibGUsICJfIiwgYygicCIsICJpbmRpY2Fkb3IiLCAib3JpZ2VtIikpKSAlPiUKICBzZWxlY3QoZmV6LmF1bGEsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkgCgp0bXAgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBmZXouYXVsYSwgeSA9IHZhbHVlLCBmaWxsID0gZmV6LmF1bGEpLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIC0gQWx1bm9zIHF1ZSBmaXplcmFtIGF1bGEiLAogICAgICAgeSA9ICJQZXJjZW50dWFsIGRlIGlkZW50aWZpY2HDp8OjbyIsIHggPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjUsIGhqdXN0ID0gMSksIAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQphbm92YV9mZXouYXVsYSA8LSB0ZXN0ZS5hbm92YShmb3JtdWxhID0gdmFsdWUgfiBmZXouYXVsYSwgCiAgICAgICAgICAgIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKQoKYW5vdmFfZmV6LmF1bGEkdGVzdGUubm9ybWFsaWRhZGUKYW5vdmFfZmV6LmF1bGEkdGVzdGUuYW5vdmEKYW5vdmFfZmV6LmF1bGEkdGFiZWxhLnR1a2V5CmBgYAoKCiMjIyAxMCAtIEVzdHVkYW50ZXMgZGEgQ2lkYWRlIDEgKGNvbSBVQykgdGVtIG1haW9yIG7Dum1lcm8gZGUgYWNlcnRvcyBkZSBlc3DDqWNpZXMgbmF0aXZhcy4KCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfZmxvbmEgJT4lCiAgICBzZWxlY3QoZmxvbmEsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9uYXRpdmFzLCBwX2luZGljZV9uYXRpdmFzKSAlPiUKICAgIGFycmFuZ2UoZmxvbmEpICU+JQogICAgbWVsdChpZCA9ICJmbG9uYSIpCgp0bXAgPC0gY2JpbmQodG1wLCBjb2xzcGxpdCh0bXAkdmFyaWFibGUsICJfIiwgYygicCIsICJpbmRpY2Fkb3IiLCAib3JpZ2VtIikpKSAlPiUKICBzZWxlY3QoZmxvbmEsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkgCgp0bXAgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBmbG9uYSwgeSA9IHZhbHVlLCBmaWxsID0gZmxvbmEpLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIC0gQWx1bm9zIHF1ZSB2aXNpdGFyYW0gYSBGbG9uYSIsCiAgICAgICB5ID0gIlBlcmNlbnR1YWwgZGUgaWRlbnRpZmljYcOnw6NvIiwgeCA9ICIiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSwgCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCmBgYAoKYGBge3J9CiMgdC5hbm92YSA8LSBhb3YoZGF0YSA9IHRtcCwgZm9ybXVsYSA9IHZhbHVlIH4gZmxvbmEpCiMgdC5hbm92YQojIHN1bW1hcnkodC5hbm92YSkKIyAKIyB0dWtleSA8LSBUdWtleUhTRCh0LmFub3ZhKQojIHR1a2V5Cgphbm92YV9mbG9uYSA8LSB0ZXN0ZS5hbm92YShmb3JtdWxhID0gdmFsdWUgfiBmbG9uYSwgCiAgICAgICAgICAgIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKQoKYW5vdmFfZmxvbmEkdGVzdGUubm9ybWFsaWRhZGUKYW5vdmFfZmxvbmEkdGVzdGUuYW5vdmEKYW5vdmFfZmxvbmEkdGFiZWxhLnR1a2V5CgpgYGAKCiMjIyAxMSAtIFJhbmtpbmcgZG9zIGFuaW1haXMKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQphMSA8LSAKICAgIHBvc19nYWJhcml0byRyYWtpbmdfYW5pbWFpcyRuYXRpdm9zICU+JQogICAgaGVhZCgyMCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBhbmltYWlzLCB5ID0gZnJlcSwgZmlsbCA9IGZyZXEpKSArCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHNob3cubGVnZW5kID0gRikgKwogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZyZXEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHZqdXN0ID0gLTEsIGhqdXN0ID0gMC41KSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDkwKSkgKwogICAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAib3JhbmdlIiwgaGlnaCA9ICJyZWQiKSArCiAgICB0aGVtZV9idygpICsKICAgIGxhYnModGl0bGUgPSAiRXNww6ljaWVzIGNpdGFkYXMgY29tbyBuYXRpdmFzIiwKICAgICAgIHkgPSAiRnJlcXVlbmNpYSIsIHggPSAiIikgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkKYTIgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcmFraW5nX2FuaW1haXMkZXhvdGljb3MgJT4lCiAgICBoZWFkKDIwKSAlPiUKICAgIGdncGxvdChhZXMoeCA9IGFuaW1haXMsIHkgPSBmcmVxLCBmaWxsID0gZnJlcSkpICsKICAgIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gZnJlcSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAwLjUpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsOTApKSArCiAgICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJsaWdodGJsdWUiLCBoaWdoID0gImRhcmtibHVlIikgKwogICAgdGhlbWVfYncoKSArCiAgICBsYWJzKHRpdGxlID0gIkVzcMOpY2llcyBjaXRhZGFzIGNvbW8gZXjDs3RpY2FzIiwKICAgICAgIHkgPSAiRnJlcXVlbmNpYSIsIHggPSAiIikgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkKZ3JpZC5hcnJhbmdlKGExLCBhMiwKICAgICAgICAgICAgIG5yb3cgPSAyLAogICAgICAgICAgICAgdG9wID0gdGV4dEdyb2IoIlRPUCAyMCAtIFJhbmtpbmcgZGFzIGVzcMOpY2llcyBjaXRhZGFzIGNvbW8gZXhlbXBsb1xuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udHNpemUgPSAyMCwgZm9udCA9IDIpKQopCmBgYAoK